home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / asmutil / asm_n_z.zip / RES86B.ASM < prev    next >
Assembly Source File  |  1985-08-02  |  37KB  |  2,302 lines

  1.  
  2. ; Here is the second half of the RESOURCE program source
  3.  
  4.     page    60,132
  5.  
  6. code    segment    byte public
  7.  
  8.     assume    cs:code,ds:code
  9.  
  10.     extrn    start:near,hsym:near,nwln0:near,delim:near,cmerr:near
  11.     extrn    nxcmd:near
  12.  
  13.     extrn    fcb:word,tbuf:word
  14.  
  15.     public    stack,wfiflg,quiflg,segflg,trmflg,segsho,opdtyp,segmsk,insloc
  16.     public    ofsptr,curpar,segsiz,dmpstt,dmpcnt,dmpend,curofs,wrtflg
  17.     public    ascbld,liscnt,cntenb,lastwd,doctbl,pcntr,rplptr,ecnt,xcptr
  18.     public    nxtctl,symtp,docend,ctlbas,fndadd,fndpc,nrsegs,mcbsiz
  19.     public    cofset,sdflg,ctltop,typndx,xcsw,hiload,symtyp,mcbbas,fake_comtbl
  20.  
  21.     public    bdos,initbl,typech,gtcmd,cmdbuf,cmentr,flushf,prtstr,pstrg
  22.     public    cmkill,prword,gtval,pstg,typech,xo0,crlf,gtval,symbas,prntde
  23.     public    xo,addfn,keychk,cofset,prspc,pstar,lngth,locsym,ifasci
  24.     public    semic,dline,dcrlf,adb,strcnt,litall,cmpstr,litcmd,litdoc
  25.     public    litctl,litsym,fopen,cstbl,segnam,fclose,rdfchr,creatf
  26.     public    wtfchr,lita86,hexl,hexr,symluk,rdfchr,semic,tabc
  27.  
  28. ;
  29. ;
  30. ;
  31. dline:    cmp    nlblfg,0
  32.     jnz    l11b9
  33.     cmp    segval,0
  34.     jz    l11b6
  35.     cmp    pfxcnt,0
  36.     jnz    l11b6
  37.     mov    segval,0    ;clr segval
  38.     call    pstg
  39.     db    0ah,0dh,';ILLEGAL SEGMENT OVERRIDE '
  40.     db    'ATTEMPTED !',0ah,0dh,0
  41. l11b6:    mov    al,segmsk
  42.     mov    opdtyp,al
  43.     call    hsym
  44.     mov    bx,rplptr
  45.     mov    al,bh
  46.     or    al,bl
  47.     jz    l11b9
  48.     mov    ch,byte ptr [bx]
  49.     inc    bx    ;skip the *
  50.     dec    ch
  51.     call    nwln0    ;print replacing line with comment
  52.     mov    al,0ffh
  53.     mov    replsw,al
  54. l11b9:    dec    pfxcnt
  55.     mov    es,curpar
  56.     mov    nlblfg,0
  57.     mov    opdtyp,    04h    ;ds is most likely 
  58.     mov    pfflg,al
  59.     mov    dx,pcntr
  60.     mov    bx,curofs
  61.     add    bx,dx
  62.     mov    curadr,bx
  63.     inc    dx
  64.     mov    pcntr,dx
  65.     mov    ch,es:byte ptr [bx]    ;opcode byte in ch
  66.     mov    cinstr,ch
  67.     mov    bx,offset opct-7
  68.     mov    dx,7    ;size of table item -1
  69. l11e3:    add    bx,dx
  70.     mov    al,cs:byte ptr [bx]
  71.     or    al,al
  72.     jnz    l11ee
  73.     jmp    pdbbyt    ;end of table
  74. ;
  75. l11ee:    and    al,ch
  76.     mov    cl,al    ;masked opcode
  77.     inc    bx
  78.     mov    al,cs:byte ptr [bx]
  79.     cmp    al,cl    ;test against pattern
  80.     jnz    l11e3
  81.     inc    bx
  82.     mov    al,cs:byte ptr [bx]    ;instr type index
  83.     mov    byte ptr typndx,al
  84.     mov    ch,5    ;size of literal
  85. lopclp:    inc    bx
  86.     mov    al,cs:byte ptr [bx]
  87.     cmp    al,'.'    ;dot to be ignored
  88.     jz    nodot
  89.     call    typech    ;output literal opcode
  90. nodot:    dec    ch
  91.     jnz    lopclp
  92.     mov    dl,byte ptr typndx
  93.     and    dl,3fh
  94.     mov    dh,0
  95.     mov    bx,offset jmptbl
  96.     add    bx,dx
  97.     add    bx,dx
  98.     mov    dx,cs:[bx]
  99.     mov    bx,curadr
  100.     jmp    dx
  101. ;
  102. ;
  103. jmptbl    dw    offset kind00
  104.     dw    offset kind01
  105.     dw    offset kind02
  106.     dw    offset kind03
  107.     dw    offset kind04
  108.     dw    offset kind05
  109.     dw    offset kind06
  110.     dw    offset kind07
  111.     dw    offset kind08
  112.     dw    offset kind09
  113.     dw    offset kind10
  114.     dw    offset kind11
  115.     dw    offset kind12
  116.     dw    offset kind13
  117.     dw    offset kind14
  118.     dw    offset kind15
  119.     dw    offset kind16
  120.     dw    offset kind17
  121.     dw    offset kind18
  122.     dw    offset kind19
  123.     dw    offset kind20
  124.     dw    offset kind21
  125.     dw    offset kind22
  126.     dw    offset kind23
  127.     dw    offset kind24
  128.     dw    offset kind25
  129.     dw    offset kind26
  130.     dw    offset kind27
  131.     dw    offset kind28
  132.     dw    offset kind29
  133.     dw    offset kind30
  134.     dw    offset kind31
  135.     dw    offset kind32
  136.     dw    offset kind33
  137.     dw    offset kind34
  138.     dw    offset kind35
  139.     dw    offset kind36
  140.     dw    offset kind37
  141.     dw    offset kind38
  142.     dw    offset kind39
  143. ;
  144. ;
  145. ;
  146. kind00:    jmp    dcrlf    ;opcode only
  147. ;
  148. kind01:    call    tabc        ;in/out
  149.     mov    al,es:[bx]
  150.     test    al,2
  151.     jnz    k01out
  152.     test    al,1
  153.     jnz    k01iw
  154.     call    pstg
  155.     db    'AL,DX',0
  156.     jmp    dcrlf
  157. ;
  158. k01iw:    call    pstg
  159.     db    'AX,DX',0
  160.     jmp    dcrlf
  161. ;
  162. k01out:    test    al,1
  163.     jnz    k01ow
  164.     call    pstg
  165.     db    'DX,AL',0
  166.     jmp    dcrlf
  167. ;
  168. k01ow:    call    pstg
  169.     db    'DX,AX',0
  170.     jmp    dcrlf
  171. ;
  172. kind02:    inc    pcntr
  173.     call    tabc
  174.     mov    al,es:[bx]
  175.     test    al,2
  176.     jnz    k02mtr
  177.     call    pstg
  178.     db    'AX,',0
  179.     jmp    l139b
  180. ;
  181. k02mtr:    inc    curadr
  182.     mov    bx,curadr
  183.     mov    al,es:[bx]
  184.     call    psmnum
  185.     call    pstg
  186.     db    ',AX',0
  187.     jmp    dcrlf
  188. ;
  189. kind37:    inc    pcntr
  190.     call    tabc
  191.     inc    bx
  192.     mov    al,es:[bx]
  193.     test    al,2
  194.     jnz    k37mtr
  195.     call    pstg
  196.     db    'AL,',0
  197.     jmp    l139b
  198. ;
  199. k37mtr:    inc    curadr
  200.     mov    bx,curadr
  201.     mov    al,es:[bx]
  202.     call    psmnum
  203.     call    pstg
  204.     db    ',AL',0
  205.     jmp    dcrlf
  206. ;
  207. kind03:    call    tabc
  208.     mov    al,es:[bx]
  209.     test    al,8
  210.     jnz    k03mtr
  211.     inc    pcntr
  212.     and    al,7
  213.     call    namrg8
  214.     call    comma
  215.     jmp    l139b
  216. ;
  217. k03mtr:    inc    pcntr
  218.     inc    pcntr
  219.     and    al,7
  220.     call    namr16
  221.     call    comma
  222. pwdval:                ;print word value
  223.     mov    bx,curadr
  224.     inc    bx
  225.     mov    dx,es:[bx]
  226.     push    dx
  227.     call    symluk
  228.     jnb    hvsym3
  229.     test    word ptr sybflg,0ffh
  230.     jz    nosym3
  231.     pop    dx
  232.     push    dx
  233.     call    addsym
  234. nosym3:    pop    dx
  235.     call    pcon16
  236.     jmp    dcrlf
  237. ;
  238. hvsym3:    call    pstg
  239.     db    'OFFSET ',0
  240.     call    pstrg
  241.     pop    dx
  242.     jmp    dcrlf
  243. ;
  244. kind04:    inc    pcntr        ;8 bit arith
  245.     call    tabc
  246.     call    pstg
  247.     db    'AL,',0
  248. l139b:    inc    curadr
  249.     call    bytopd
  250.     jmp    dcrlf
  251. ;
  252. bytopd:    mov    bx,curadr
  253.     mov    al,es:[bx]
  254.     cmp    al,' '
  255.     jb    l13c3
  256.     cmp    al,'Z'+1
  257.     jnb    l13c3
  258.     mov    al,es:[bx]
  259.     call    pqtchr
  260.     mov    al,''''    ;27h
  261.     call    typech    ;ending quote
  262.     call    tabc
  263.     call    semic
  264. l13c3:    mov    al,es:[bx]
  265.     call    psmnum
  266.     ret
  267. ;
  268. kind05:    call    tabc    ;call/jmp relative address
  269.     inc    pcntr
  270.     inc    pcntr
  271.     inc    bx
  272.     mov    dx,es:[bx]
  273.     inc    bx
  274.     inc    bx
  275.     sub    bx,curofs
  276.     add    bx,dx
  277.     mov    dx,bx
  278.     mov    opdtyp,0ch    ;cs, instruction
  279.     call    prntde
  280.     jmp    dcrlf
  281. ;
  282. kind06:    call    tabc
  283.     inc    pcntr
  284.     inc    pcntr
  285.     call    pstg
  286.     db    'AX,',0
  287.     jmp    pwdval
  288. ;
  289. opdsy1:    push    dx
  290.     call    symluk        ;check for symbol
  291.     jnb    havsym
  292.     jmp    short mkopds
  293. ;
  294. havsym:    call    pstrg        ;display operand symbol
  295.     pop    dx
  296.     ret
  297. ;
  298. prtdei:    mov    bx,curadr
  299.     inc    bx
  300.     mov    dx,es:[bx]
  301. prntde:    push    dx
  302.     call    symluk        ;test for symbol
  303.     jnb    hvsym2
  304. mkopds:    test    byte ptr sybflg,0ffh    ;building symbols?
  305.     jz    pmaddr
  306.     pop    dx
  307.     push    dx
  308.     call    addsym
  309.     jmp    pmaddr
  310. ;
  311. hvsym2:    call    pstrg
  312.     test    byte ptr trmflg,0ffh
  313.     jz    cmtadr
  314.     pop    dx
  315.     ret
  316. ;
  317. cmtadr:    call    tabc
  318.     call    semic
  319. pmaddr:    pop    dx
  320. pcon16:    mov    al,dh
  321.     or    al,dl
  322.     mov    al,'0'    ;30h
  323.     jz    l147d
  324.     mov    al,dh
  325.     or    al,al
  326.     jz    pcon8
  327.     call    xo0
  328.     mov    al,dl
  329.     call    xo
  330. phxsfx:    mov    al,'H'    ;48h
  331. l147d:    call    typech
  332.     ret
  333. ;
  334. pcon8:    mov    al,dl
  335. psmnum:    cmp    al,0ah
  336.     jb    padigt
  337.     call    xo0
  338.     jmp    phxsfx
  339. ;
  340. padigt:    add    al,'0'    ;30h
  341.     jmp    l147d
  342. ;
  343. kind07:    call    tabc
  344.     inc    pcntr
  345.     jmp    l139b
  346. ;
  347. kind08:    inc    pcntr
  348.     jmp    dcrlf
  349. ;
  350. kind09:    mov    al,' '    ;lock/rep/repnz
  351.     call    typech    ;space after prfx instr
  352.     mov    nlblfg,0ffh    ;no label betw opcodes
  353.     jmp    l11b9        ;really continue same instr
  354. ;
  355. kind10:    call    pstg        ;xlat opcode
  356.     db    9,'AL',0
  357.     jmp    dcrlf
  358. ;
  359. kind11:    call    pcndop        ;conditional jumps
  360. kind21:    call    tabc        ;jcxz/jmps
  361.     inc    pcntr
  362.     mov    bx,curadr
  363.     inc    bx
  364.     mov    al,es:[bx]
  365.     test    al,80h    ;what sign
  366.     jnz    k21neg
  367.     inc    bx
  368.     call    addfn
  369.     jmp    k21add
  370. ;
  371. k21neg:    inc    bx
  372.     not    al
  373.     inc    al
  374.     xor    ah,ah
  375.     sub    bx,ax
  376. k21add:    sub    bx,curofs
  377.     mov    dx,bx
  378.     mov    opdtyp,0ch    ;cs, instruction
  379.     call    prntde
  380.     jmp    dcrlf
  381. ;
  382. kind12:    call    tabc        ;movs/cmps
  383.     mov    al,es:[bx]
  384.     and    al,1
  385.     jnz    k12wrd
  386.     call    pstg
  387.     db    'AL,AL',0
  388.     jmp    dcrlf
  389. ;
  390. k12wrd:    call    pstg
  391.     db    'AX,AX',0
  392.     jmp    dcrlf
  393. ;
  394. kind13:    call    pstg        ;xchg ax with ??
  395.     db    9,'AX,',0
  396.     mov    al,es:[bx]
  397.     and    al,7
  398.     call    namr16
  399.     jmp    dcrlf
  400. ;
  401. kind14:    call    pstg        ;unimplemented opcodes
  402.     db    'DB',9,'0',0
  403.     mov    al,es:[bx]
  404.     call    xo
  405.     mov    al,'H'    ;48h
  406.     call    typech
  407.     jmp    dcrlf
  408. ;
  409. kind15:    call    tabc    ;one 16 bit register
  410.     mov    al,es:[bx]
  411.     and    al,7
  412.     call    namr16
  413.     jmp    dcrlf
  414. ;
  415. l1552:    mov    bx,curadr
  416.     inc    bx
  417.     mov    al,es:[bx]
  418.     and    al,7
  419.     jmp    l156d
  420. ;
  421. l155e:    mov    bx,curadr
  422.     inc    bx
  423.     mov    al,es:[bx]
  424.     and    al,38h
  425.     shr    al,1
  426.     shr    al,1
  427.     shr    al,1
  428. l156d:    push    ax
  429.     mov    bx,curadr
  430.     mov    al,es:[bx]
  431.     test    al,1
  432.     jnz    l157c
  433.     pop    ax
  434.     jmp    namrg8
  435. ;
  436. l157c:    pop    ax
  437.     jmp    namr16
  438. ;
  439. l1580:    mov    bx,curadr
  440.     inc    bx
  441.     mov    al,es:[bx]
  442.     and    al,0c0h
  443.     cmp    al,0
  444.     jz    l15ba
  445.     cmp    al,0c0h
  446.     jz    l1594
  447.     jmp    l15e0
  448. ;
  449. l1594:    inc    pcntr
  450.     mov    bx,curadr
  451.     mov    al,es:[bx]
  452.     test    al,2
  453.     jnz    l15ae
  454.     call    l1552
  455.     call    comma
  456.     call    l155e
  457.     jmp    dcrlf
  458. ;
  459. l15ae:    call    l155e
  460.     call    comma
  461.     call    l1552
  462.     jmp    dcrlf
  463. ;
  464. l15ba:    inc    pcntr
  465.     mov    bx,curadr
  466.     mov    al,es:[bx]
  467.     test    al,2
  468.     jnz    l15d4
  469.     call    l1606
  470.     call    comma
  471.     call    l155e
  472.     jmp    dcrlf
  473. ;
  474. l15d4:    call    l155e
  475.     call    comma
  476.     call    l1606
  477.     jmp    dcrlf
  478. ;
  479. l15e0:    inc    pcntr
  480.     mov    bx,curadr
  481.     mov    al,es:[bx]
  482.     test    al,2
  483.     jnz    l15fa
  484.     call    l164f
  485.     call    comma
  486.     call    l155e
  487.     jmp    dcrlf
  488. ;
  489. l15fa:    call    l155e
  490.     call    comma
  491.     call    l164f
  492.     jmp    dcrlf
  493. ;
  494. l1606:    call    psgprf        ;show segment first
  495.     mov    bx,curadr
  496.     mov    al,es:[bx]
  497.     test    al,1
  498.     jnz    l1623
  499.     call    pstg
  500.     db    'BYTE PTR ',0
  501.     or    byte ptr opdtyp,01h    ;byte size
  502.     jmp    l1630
  503. ;
  504. l162